package partita;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;


import dinosauri.Specie;

import ambienteDiGioco.AmbienteDiGioco;


public class Partita {
	private ArrayList <dinosauri.Specie> listaSpecie;
	private ArrayList <dinosauri.Specie> classifica;
	static Partita singleton;
	private  Giocatore [] GiocatoriInPartita;
	private ArrayList <Giocatore> GiocatoriTutti;
	static final int NumMaxGiocatoriConnessi = 8;
	
	
	private Partita(){
		
		
		listaSpecie = new ArrayList<dinosauri.Specie>();
		//ANCORA DA IMPLEMENTARE opzioni seguenti mutuamente esclusive a seconda della decisione dell'utente all'atto di inizializzazione del gioco
		//AmbienteDiGioco play=AmbienteDiGioco.instance();
		//AmbienteDiGioco.instance(/*url*/);
		//AmbienteDiGioco.instance(/*percentualeTerra, raggruppamentoMinimoCaselleAcqua, raggruppamentoMassimoCaselleAcqua, percentualeZoneConVegetazioneSuZoneDiTerra, numeroZoneConCarogna*/);
		//classifica = new ArrayList<dinosauri.Specie>();
		//classifica = listaSpecie; 
		
		GiocatoriInPartita = new Giocatore[NumMaxGiocatoriConnessi];
		GiocatoriTutti = new ArrayList<Giocatore>();
		
	}

	public static Partita inizializzaPartita() {
		if ((singleton == null)&& (AmbienteDiGioco.istanziato()== true))
			singleton = new Partita();
		return singleton;
	}
	
  public void resetPartita (){
	  listaSpecie.clear();
	  singleton=null;
	  
  }
	
	public boolean aggiungiSpecie(Specie specie){
		if (contieneSpecie(specie)==false) {
			listaSpecie.add(specie);
			return true;
		}
		 return false;
	
		}
		
	
  public boolean eliminaSpecie(Specie specie){
	  if (contieneSpecie(specie)==true) {
			listaSpecie.remove(specie);
			return true;
		}
		 return false;
	
		
		
	  
  }
		
		
		
	
	public boolean contieneSpecie (Specie specie){
		for(int i=0; i<listaSpecie.size(); i++){
			if( listaSpecie.get(i).getNomeSpecie().equals(specie.getNomeSpecie()) ) return true;
		
		}
			return false;
		
		
	}
		
	private class ConfrontaPunteggio implements Comparator<Specie>{
		public int compare(Specie s1, Specie s2){
			int diffPunteggio = s1.getPunteggio()-s2.getPunteggio();
			return diffPunteggio;
		}
		
	}
	
	
	public void aggiornaClassifica(){
		   Collections.sort(listaSpecie, Collections.reverseOrder(new ConfrontaPunteggio()) );
			
			
		}	
		
	
	
	public void getList(){
		for(int j=0; j<listaSpecie.size(); j++){
			System.out.println( listaSpecie.get(j).getNomeSpecie()+"    "+ listaSpecie.get(j).getPunteggio());
		}
		
	}
	
	/*public void getClassifica(){
		for(int j=0; j<classifica.size(); j++){
			System.out.println( classifica.get(j).getNomeSpecie() );
		}
		
	}
	
	public String toString(){
		String a= new String();
		for(int i=0; i<listaSpecie.size()-1;i++){
			a.concat(listaSpecie.get(i).getNomeSpecie());
		} return a;
		
	}*/
	
	

}
